package com.briup.ch13;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * @Author briup-adam
 * @Date 2023/10/30 上午11:01
 * @Description 通过字节码对象访问 类中的方法
 **/

public class MethodTest {
    public static void main(String[] args) {
        try {
            //获取cat类的字节码对象
            Class<?> catClass =  Class.forName("com.briup.ch13.Cat");
            //获取所有公共方法  包含继承的方法
            Method[] methods = catClass.getMethods();
            for (Method method : methods) {
                System.out.println(method);
            }
            System.out.println("--===============================--");
            //获取所有方法 不包含继承到的
            Method[] methods1 = catClass.getDeclaredMethods();
            for (Method method : methods1) {
                System.out.println(method);
                //获取方法的名字
                String name = method.getName();
                System.out.println(name);
                //获取参数个数
                int count = method.getParameterCount();
                System.out.println(count);
                //获取参数列表
                Class<?>[] types = method.getParameterTypes();
                for (Class<?> type : types) {
                    System.out.println(type);
                }
            }
            //获取公共的指定方法
            Method toStringMethod = catClass.getMethod("toString");
            //获取方法的修饰符
            int modifiers = toStringMethod.getModifiers();
            System.out.println(modifiers);
            //校验修饰符是否是public
            boolean b = Modifier.isPublic(modifiers);
            System.out.println(b);
            //获取方法的返回值
            Class<?> returnType = toStringMethod.getReturnType();
            System.out.println(returnType);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}
